#ifndef SINGLE
//  An adapted ObjectSpace example for use with SGI STL

#include <iostream.h>
#include <algo.h>

#ifdef MAIN
#define bcompos2_test main
#endif
struct odd : public unary_function<int, bool>
{
  odd() {}
  bool operator()(int n_) const { return(n_ % 2) == 1; }
};

struct positive : public unary_function<int, bool>
{
  positive() {}
  bool operator()(int n_) const { return n_ >= 0; }
};

#endif

#ifdef ACORN_CFRONT
TEMPLATE_compose2(logical_and<bool>, odd, positive, int, bool)
#endif

int bcompos2_test(int, char**)
{
  cout<<"Results of bcompos2_test:"<<endl;

#ifndef ACORN_CFRONT
int array [6] = { -2, -1 , 0, 1, 2, 3 };
#else
static int array [6] = { -2, -1 , 0, 1, 2, 3 };
#endif

  int* p = find_if(array, array + 6,
    compose2(logical_and<bool>(), odd(), positive()));
  if(p != array + 6)
    cout << *p << " is odd and positive" << endl;
  return 0;
}
